Node.js で Lambda から S3 に年月のフォルダを作成してみた
こんにちは。アノテーションの中村(誠)です。 今回は、Node.js で Lambda から S3 に年月のフォルダを作成するコードを書いてみたので紹介します。
対象読者
・Node.js を使用している方
・AWS SDK for JavaScript の基本的な使用方法がわかる方
・Lambda の基本的な使用方法がわかる方
・プログラムから S3 に年月ごとのフォルダを作成したいと思っている方
使用する API
PutObject API を使用することで、フォルダを作成できます。
コード
const AWS = require("aws-sdk"); AWS.config.update({ region: "ap-northeast-1" }); AWS.config.apiVersions = { s3: "2006-03-01", }; exports.handler = async () => { const date = new Date(); const year = date.getFullYear(); //月は 0 埋め 2 桁 const month = `0${date.getMonth() + 1}`.slice(-2); const params = { Bucket: "your-bucket-name", Key: `${year}/${month}/`, }; const s3 = new AWS.S3(); try { // putObject でフォルダを作成 await s3.putObject(params).promise(); } catch (err) { console.log(err); } };
解説
年月取得
const date = new Date(); const year = date.getFullYear(); //月は 0 埋め 2 桁 const month = `0${date.getMonth() + 1}`.slice(-2);
getFullYear()
とgetMonth()
で現在の年月を取得しています。
getMonth()
は 0 始まりという仕様なので、現在の月に合わせるため、getMonth() + 1
としています。
パラメーター指定
const params = { Bucket: "your-bucket-name", Key: `${year}/${month}/`, };
"your-bucket-name"
に使用したい S3 バケット名を入力します。
フォルダはyear/month
の形式で作成されるように指定しています。
フォルダ作成
const s3 = new AWS.S3(); try { // putObject でフォルダを作成 await s3.putObject(params).promise(); } catch (err) { console.log(err); }
putObject
にパラメーターを渡し、フォルダを作成します。
今回は戻り値が必要ないので取得していませんが、戻り値は ETag
でした。
必要に応じて取得してください。
Lambda の設定
コードは適宜アップロードしてください。
・ランタイム
Node.js 14.x
・必要な権限
AWSLambdaBasicExecutionRole
AmazonS3FullAccess (必要に応じて権限を絞ってください)
設定後にテスト実行すると、S3 にフォルダが作成されているはずです。
S3 コンソールで確認
S3 コンソールで確認してみましょう。
現在の年月でフォルダができていることが確認できました。 ファイルなどはアップロードしていないので、月フォルダの中身は空です。 必要に応じでログや生成したファイルなどをフォルダに PUT してください。
まとめ
今回は、Node.js で Lambda から S3 に年月のフォルダを作成するコードを紹介しました。 「検索すれば山ほど出てくるんだろう」と思って調べたら、意外なことにヒットしなかったので、それなら自分がと思って紹介しました。 EventBridge のスケジューリングと組み合わることで、毎月自動的にフォルダを作成するということも可能だと思います。 ご覧頂いた方の参考になれば幸いです。
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社 WEB サイトをご覧ください。